TypeScript 93.3%
JavaScript 4.4%
CSS 2.3%
1/**2 * Author: Simon-Pierre Boucher3 * Contact: contact@spboucher.ai4 * Project: Hilmacorp.ai — Web Platform5 * File: app/[locale]/founders/page.tsx6 * Description: Founders page — profiles of Simon-Pierre Boucher and Massamba Mbaye7 */89import type { Metadata } from "next";10import Container from "@/components/Container";11import SectionHeading from "@/components/SectionHeading";12import { getMessages, isLocale, type Locale } from "@/lib/i18n";1314export async function generateMetadata({15 params,16}: {17 params: Promise<{ locale: string }>;18}): Promise<Metadata> {19 const { locale } = await params;20 if (!isLocale(locale)) return {};21 const { meta } = getMessages(locale);22 return { title: { absolute: meta.founders.title }, description: meta.founders.description };23}2425function FounderCard({26 name,27 role,28 bio,29 tags,30 initials,31}: {32 name: string;33 role: string;34 bio: string;35 tags: string[];36 initials: string;37}) {38 return (39 <article className="rounded-3xl border border-line bg-card p-8 shadow-sm sm:p-10">40 <div className="flex items-center gap-5">41 <span42 aria-hidden="true"43 className="flex h-16 w-16 shrink-0 items-center justify-center rounded-2xl bg-ink font-mono text-lg font-semibold text-paper"44 >45 {initials}46 </span>47 <div>48 <h2 className="font-display text-2xl font-semibold text-ink">{name}</h2>49 <p className="mt-1 text-sm font-medium text-accent">{role}</p>50 </div>51 </div>52 <p className="mt-6 leading-relaxed text-ink-soft">{bio}</p>53 <ul className="mt-6 flex flex-wrap gap-2">54 {tags.map((tag) => (55 <li56 key={tag}57 className="rounded-full bg-accent-soft px-3 py-1 text-xs font-medium text-accent-strong"58 >59 {tag}60 </li>61 ))}62 </ul>63 </article>64 );65}6667export default async function FoundersPage({68 params,69}: {70 params: Promise<{ locale: string }>;71}) {72 const { locale } = await params;73 const { founders } = getMessages(locale as Locale);7475 return (76 <>77 <section className="relative overflow-hidden border-b border-line">78 <div className="grid-backdrop absolute inset-0" aria-hidden="true" />79 <Container className="relative py-20 sm:py-28">80 <SectionHeading as="h1" title={founders.title} lead={founders.lead} />81 </Container>82 </section>8384 <section className="py-20 sm:py-24">85 <Container className="grid gap-8 lg:grid-cols-2">86 <FounderCard87 name={founders.spb.name}88 role={founders.spb.role}89 bio={founders.spb.bio}90 tags={founders.spb.tags}91 initials="SPB"92 />93 <FounderCard94 name={founders.mm.name}95 role={founders.mm.role}96 bio={founders.mm.bio}97 tags={founders.mm.tags}98 initials="MM"99 />100 </Container>101 </section>102 </>103 );104}105